<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1、js的单例最简单的方案就是字面量创建对象
        // var gf = {
        //     'name': '刘亦菲'
        // }



        // 2、
        function Girlfriend (name) {
            this.name = name
        }

        // 如果是第一次调用，那么就创建一个实例，如果以后再调用，就把第一次创建的实例直接返回
        // 这里的代码只是演示思路，忘了最好
        // function getGf (name) {
        //     var gf = null
        //     if (gf === null) {
        //         // 还没有gf实例，那就new一个
        //         gf = new Girlfriend(name)
        //     }
        // }

        // getGf('朱茵')
        // console.log(gf)
        // getGf('林允儿')
        // console.log(gf)

        // 用闭包来实现单例
        // 懒汉单例：先是null，调用的时候通过判断去决定是否new
        // var getGf = (function () {
        //     var gf = null
        //     return function (name) {
        //         if (gf === null) {
        //             gf = new Girlfriend(name)
        //         }
        //         return gf
        //     }
        // })()

        // 饿汉单例：一上来直接new，内层函数里就不需要判断了
        var getGf = (function () {
            var gf = new Girlfriend('洛天依')
            return function (name) {
                return gf
            }
        })()

        var gf1 = getGf('张柏芝')
        console.log(gf1)
        var gf2 = getGf('苍老师')
        console.log(gf2)
        console.log(gf1 === gf2) // true

        



    </script>
</body>
</html>